From Cppreference
|
|
|
|
|
|
|
| template< class T > class numeric_limits;
|
|
|
|
|
|
The numeric_limits class template provides a standardized way to query about various properties of representation of fundamental types. This information is provided via specializations of the numeric_limits template. Specializations for fundamental types are already provided:
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char16_t>; //C++11 feature
template<> class numeric_limits<char32_t>; //C++11 feature
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
template<> class numeric_limits<unsigned long long>;
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;
[edit] Members
| Member
|
Default
|
Explanation
|
| static const bool is_specialized
|
false
|
true for all specializations of numeric_limits class template
|
| static const bool is_iec559
|
false
|
true if the type adheres to IEC559 international standard (the same as IEEE 754). Meaningful for all floating point numbers.
|
| static const bool is_signed
|
false
|
true if the type is signed
|
| static const bool is_integer
|
false
|
true if the type is integer
|
| static const bool is_exact
|
false
|
true if the type uses an exact representation
|
| static const bool is_modulo
|
false
|
true if the type is modulo, i.e. if an operation consisting from *, + and - results in overflow then the final result differs from expected result by a multiple of integer (max() - min() + 1)
|
| static const bool is_bounded
|
false
|
true if the type uses has infinite set of representable values, i.e. arbitrary precision number
|
[edit] Representable values
| Member
|
Default
|
Explanation
|
| static T min()
|
{return T();}
|
minimum finite value. For floating point types: minimum denormalized value. Only meaningful if is_bounded == true
|
| static T max()
|
{return T();}
|
maximum finite value. Only meaningful if is_bounded == true
|
| static T lowest() (C++11)
|
{return T();}
|
minimum finite value. Only meaningful if is_bounded == true
|
| static const denorm_style has_denorm
|
denorm_absent
|
denorm_present if denormalized values are allowed, denorm_absent if not and denorm_indeterminate if this is not known at compile time. Meaningful for floating point types.
|
| static T denorm_min()
|
{return T();}
|
returns minimum positive denormalized value. If has_denorm == denorm_absent, returns minimum positive normalized value. Meaningful for floating point types.
|
| static const bool has_infinity
|
false
|
true if the type can represent positive infinity. Shall be true for all specializations in which is_iec559 == true
|
| static T infinity()
|
{return T();}
|
returns positive infinity. Only meaningful if has_infinity == true. Required for all specializations in which is_iec559 == true
|
[edit] Representation
| Member
|
Default
|
Explanation
|
| static const int radix
|
0
|
base of the representation
|
| static const int min_exponent
|
0
|
minimum negative integer such that radix raised by power one less than that integer is a normalized floating point number. Meaningful for floating point types
|
| static const int min_exponent10
|
0
|
minimum negative integer such that 10 raised by that power is a normalized floating point number. Meaningful for floating point types
|
| static const int max_exponent
|
0
|
maximum integer such that radix raised by power one less than that integer is a representable finite floating point number. Meaningful for floating point types
|
| static const int max_exponent10
|
0
|
maximum integer such that 10 raised by that power is a representable finite floating point number. Meaningful for floating point types
|
[edit] Precision
| Member
|
Default
|
Explanation
|
| static const int digits
|
0
|
number of base radix digits that can be represented without losing precision
|
| static const int digits10
|
0
|
number of decimal digits that can be represented without losing precision. Only meaningful if is_bounded == true
|
| static const int max_digits10
|
0
|
number of decimal digits needed to represent any value without losing precision
|
| static const T epsilon()
|
{return T();}
|
the difference between 1.0 and the next representable value. Meaningful for all floating point types
|
| static const T round_error()
|
{return T();}
|
maximum possible rounding error
|
| static const bool has_denorm_loss
|
false
|
true if loss of precision is detected as a denormalization loss, rather than as an inexact result
|
| static const float_round_style round_style
|
round_towards_zero
|
floating point rounding mode. Meaningful for floating point types. Integer types shall return round_towards_zero
|
[edit] Not-a-numbers (NaNs)
| Member
|
Default
|
Explanation
|
| static const bool has_signaling_NaN
|
false
|
true if the type can represent signaling not-a-number (NaN). Shall be true if is_iec559 == true
|
| static const bool has_quiet_NaN
|
false
|
true if the type can represent non-signaling (quiet) not-a-number (NaN). Shall be true if is_iec559 == true
|
| static T signaling_NaN()
|
{return T();}
|
returns signaling not-a-number (NaN). Only meaningful if has_signaling_NaN == true. Required if is_iec559 == true
|
| static T quiet_NaN()
|
{return T();}
|
returns non-signalling (quiet) not-a-number (NaN). Only meaningful if has_quiet_NaN == true. Required if {{{1}}}
|
[edit] Miscellaneous
| Member
|
Default
|
Explanation
|
| static const bool traps
|
false
|
true if it is possible for trap to happen
|
| static const bool tinyness_before
|
false
|
true if tinyness is detected before rounding. Meaningful for floating point types.
|
[edit] Relationship with macro constants of C library
| Specialization
|
Members
|
| min()
|
lowest() (C++11)
|
max()
|
epsilon()
|
digits()
|
digits10()
|
min_exponent()
|
min_exponent10()
|
max_exponent()
|
max_exponent10()
|
| numeric_limits< bool >
|
|
|
|
|
|
|
|
|
|
|
| numeric_limits< char >
|
CHAR_MIN
|
CHAR_MIN
|
CHAR_MAX
|
|
|
|
|
|
|
|
| numeric_limits< signed char >
|
SCHAR_MIN
|
SCHAR_MIN
|
SCHAR_MAX
|
|
|
|
|
|
|
|
|
| numeric_limits< unsigned char >
|
0
|
0
|
UCHAR_MAX
|
|
|
|
|
|
|
|
| numeric_limits< wchar_t >
|
|
|
|
|
|
|
|
|
|
|
| numeric_limits< char16_t >
|
|
|
|
|
|
|
|
|
|
|
| numeric_limits< char32_t >
|
|
|
|
|
|
|
|
|
|
|
| numeric_limits< short >
|
SHRT_MIN
|
SHRT_MIN
|
SHRT_MAX
|
|
|
|
|
|
|
|
| numeric_limits< signed short >
|
|
|
|
|
|
|
|
| numeric_limits< unsigned short >
|
USHRT_MIN
|
USHRT_MIN
|
USHRT_MAX
|
|
|
|
|
|
|
|
| numeric_limits< int >
|
INT_MIN
|
INT_MIN
|
INT_MAX
|
|
|
|
|
|
|
|
| numeric_limits< signed int >
|
|
|
|
|
|
|
|
| numeric_limits< unsigned int >
|
0
|
0
|
UINT_MAX
|
|
|
|
|
|
|
|
| numeric_limits< long >
|
LONG_MIN
|
LONG_MIN
|
LONG_MAX
|
|
|
|
|
|
|
|
|
| numeric_limits< signed long >
|
|
|
|
|
|
|
|
| numeric_limits< unsigned long >
|
0
|
0
|
ULONG_MAX
|
|
|
|
|
|
|
|
| numeric_limits< long long >
|
LLONG_MIN
|
LLONG_MIN
|
LLONG_MAX
|
|
|
|
|
|
|
|
| numeric_limits< signed long long >
|
|
|
|
|
|
|
|
| numeric_limits< unsigned long long >
|
0
|
0
|
ULLONG_MAX
|
|
|
|
|
|
|
|
| numeric_limits< float >
|
FLT_MIN
|
-FLT_MAX
|
FLT_MAX
|
FLT_EPSILON
|
FLT_MANT_DIG
|
FLT_DIG
|
FLT_MIN_EXP
|
FLT_MIN_10_EXP
|
FLT_MAX_EXP
|
FLT_MAX_10_EXP
|
| numeric_limits< double >
|
DBL_MIN
|
-DBL_MAX
|
DBL_MAX
|
DBL_EPSILON
|
DBL_MANT_DIG
|
DBL_DIG
|
DBL_MIN_EXP
|
DBL_MIN_10_EXP
|
DBL_MAX_EXP
|
DBL_MAX_10_EXP
|
| numeric_limits< long double >
|
LDBL_MIN
|
-LDBL_MAX
|
LDBL_MAX
|
LDBL_EPSILON
|
LDBL_MANT_DIG
|
LDBL_DIG
|
LDBL_MIN_EXP
|
LDBL_MIN_10_EXP
|
LDBL_MAX_EXP
|
LDBL_MAX_10_EXP
|